package day_2022_9_to_12.Day;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author haomin
 * @date 2022/11/07 19:28
 **/
public class Day64_1_Num816_AmbiguousCoordinates {
    class Solution {
        public List<String> ambiguousCoordinates(String s) {
            List<String> res = new LinkedList<>();
            s = s.substring(1, s.length()-1);
            for(int i = 1; i < s.length(); ++i){
                List<String> l = combine(s.substring(0, i));
                List<String> r = combine(s.substring(i));
                for(String a : l){
                    for(String b : r){
                        res.add("(" + a + ", " + b + ")");
                    }
                }
            }
            return res;
        }
        private List<String> combine(String str){
            List<String> ret = new LinkedList<>();
            if(str.length() == 1 || str.charAt(0) != '0') ret.add(str);
            for(int i = 1; i < str.length(); ++i){
                String l = str.substring(0, i);
                String r = str.substring(i);
                if((l.length() == 1 || str.charAt(0) != '0')
                        && r.charAt(r.length()-1) != '0')
                    ret.add(l + "." + r);
            }
            return ret;
        }
    }

//    class Solution {
//        List<String> list = new ArrayList<>();
//        public List<String> ambiguousCoordinates(String s) {
//            boolean hasDou = false;
//            boolean hasDian = false;
//            dfs(s, 0, "", hasDou, hasDian);
//            return list;
//        }
//        private void dfs(String s, int k, String str, boolean hasDou, boolean hasDian){
//            if(k == s.length()) {
//                str += ")";
//                if(hasDou && hasDian)
//                    if(!list.contains(str))
//                        list.add(str);
//            }
//            if(k == 0) str += "(";
//            str += s.charAt(k);
//            if(!hasDou && k != s.length() - 2) {
//                dfs(s, k + 1, str + ", ", true, hasDian);
//                dfs(s, k + 1, str, hasDou, hasDian);
//            }else if(!hasDian && k != s.length() - 2){
//                dfs(s, k + 1, str + ".", hasDou, true);
//                dfs(s, k + 1, str, hasDou, hasDian);
//            }else {
//                dfs(s, k + 1, str, hasDou, hasDian);
//            }
//        }
//    }
}